package com.project.service.server;

import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

/***
 * 封装读取流的请求类
 */
public class Request {
    /**客户端请求路径*/
    private String url;
    /**客户端请求的表单数据*/
    private Map<String,String> paramMap = new HashMap<>();

    public Request(InputStream in){
        try {
            //将读取流信息读取到byte数组
            byte[] by = new byte[1024];
            in.read(by);
            String str = new String(by).trim();
            System.out.println(str);

            if(str.startsWith("GET")){
                this.pressGet(str);
            }
            else if(str.startsWith("POST")){
                this.pressPost(str);
            }

        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * 处理POST请求
     * @param str 请求字符串
     */
    private void pressPost(String str) {
        String[] array = str.split("\\s+");
        this.url = array[1].substring(1);
        this.fullMap(array[array.length - 1]);
    }

    /**
     * 处理GET请求
     * @param str 请求字符串
     */
    private void pressGet(String str) {
        String[] array = str.split("\\s+");
        //提取第二个元素，截取开始的/
        String urlStr = array[1].substring(1);
        if(urlStr.indexOf("?") == -1){//请求的是文件
            this.url = urlStr;
        }
        else{//请求的业务组件
            String[] arr = urlStr.split("[?]");
            this.url = arr[0];
            this.fullMap(arr[1]);
        }
    }

    /**
     * 将形如a=1&b=2字符串封装成map集合
     * @param s 表单数据
     */
    private void fullMap(String s) {
        String[] array = s.split("&");
        for(String str : array){
            String[] tempArray = str.split("=");
            if(tempArray.length == 2){
                this.paramMap.put(tempArray[0],tempArray[1]);
            }
            else if(tempArray.length == 1){
                this.paramMap.put(tempArray[0],"");
            }
        }
    }

    public String getUrl() {
        return url;
    }

    /**
     * 根据表单名，得到表单值
     * @param key 表单名
     * @return 表单值
     */
    public String getParameter(String key){
        return this.paramMap.get(key);
    }

    @Override
    public String toString() {
        return "Request{" +
                "url='" + url + '\'' +
                ", paramMap=" + paramMap +
                '}';
    }

    public static void main(String[] args) {
//        String str = "addfadsf";
//        System.out.println(str.indexOf("?"));

        String str = "name=";
        String[] array = str.split("=");
        System.out.println(array.length);
    }
}
